package com.demarc.pesquisas.negocio.dto;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.demarc.pesquisas.infraestrutura.util.utils.DemarPesquisasUtil;
import com.demarc.pesquisas.negocio.entidade.Endereco;
import com.demarc.pesquisas.negocio.entidade.domicilio.Domicilio;
import com.demarc.pesquisas.negocio.entidade.domicilio.Morador;
import com.demarc.pesquisas.negocio.entidade.entrevista.Entrevista;
import com.demarc.pesquisas.negocio.entidade.entrevistado.Entrevistado;
import com.demarc.pesquisas.negocio.util.DateUtils;

public class DetalheEntrevistaDTO implements Serializable {

    // Informações da Entrevista
    private String nomeEntrevistador;
    private String dataEntrevista;
    private String sequencial;

    // Informações do Entrevistado
    private String nome;
    private String responsavel;
    private String cpf;
    private String rg;
    private String orgaoExpedidor;
    private String telefone;
    private String celular;
    private String carteiraTrabalho;
    private String registroNascimento;
    private String certificadoReservista;

    // Endereço
    private String localidade;
    private String tipoLocalidade;
    private String rua;
    private String bairro;
    private String numero;

    // Informações dos Moradores
    private List<Morador> moradores;

    // Informações do Domicílio
    private String quantResidentes;
    private String quantComodos;
    private String quantAposentadosRecebemPensao;
    private String quantPessoasRecebemBeneficio;
    private String tipoMaterialConstrucaoPredominante;
    private String outroMaterialConstrucao;
    private String tipoBanheiro;
    private String possuiSisterna;
    private String possuiPoco;
    private String tipoVazaoPoco;
    private String tipoTerreno;

    private String todosMoradoresPossuemRegistroCivil;
    private String quantMoradoresPossuemRegistroCivil;
    private String todosMoradoresPossuemRG;
    private String quantMoradoresPossuemRG;
    private String todosMoradoresPossuemCPF;
    private String quantMoradoresPossuemCPF;
    private String todosMoradoresACima16AnosPossuemTituloEleitor;
    private String quantMoradoresACima16AnosPossuemTituloEleitor;
    private String rendaFamiliar;
    private String quantPessoasTrabalham;
    private String quantPessoasNaoSabemLerOuEscrever;
    private String necessitaCartao;
    private String observacoes;

    public DetalheEntrevistaDTO() {
        this.moradores = new ArrayList<Morador>();
    }

    public static DetalheEntrevistaDTO converter(Entrevista entrevista) {
        DetalheEntrevistaDTO dto = new DetalheEntrevistaDTO();

        // Informações da Entrevista
        dto.setNomeEntrevistador(entrevista.getEntrevistador().getNome());
        dto.setDataEntrevista(DateUtils.converterDateTimeParaString(entrevista.getData(),
                DateUtils.DATA_PADRAO_PT_BR));
        dto.setSequencial(entrevista.getSequencial().toString());

        // Informações do Entrevistado
        Entrevistado entrevistado = entrevista.getEntrevistado();
        dto.setNome(entrevistado.getNome());
        dto.setResponsavel(entrevistado.getResponsavel().getDescricao());
        dto.setCpf(entrevistado.getCpf());
        dto.setRg(entrevistado.getRg());
        dto.setOrgaoExpedidor(entrevistado.getOrgaoExpedidor());
        dto.setTelefone(entrevistado.getTelefone());
        dto.setCelular(entrevistado.getCelular());
        dto.setCarteiraTrabalho(entrevistado.getCarteiraTrabalho());
        dto.setRegistroNascimento(entrevistado.getRegistroNascimento());
        dto.setCertificadoReservista(entrevistado.getCertificadoReservista());

        // Endereço
        Domicilio domicilio = entrevista.getDomicilio();
        Endereco endereco = domicilio.getEndereco();
        dto.setLocalidade(endereco.getLocalidade());
        dto.setTipoLocalidade(endereco.getTipoLocalidade().getDescricao());
        dto.setRua(endereco.getRua());
        dto.setNumero(endereco.getNumero() == null ? null : endereco.getNumero().toString());
        dto.setBairro(endereco.getBairro());

        // Informações dos Moradores
        dto.setMoradores(domicilio.getMoradores());

        // Informações do Domicílio
        dto.setQuantResidentes(integerToString(domicilio.getQuantResidentes()));
        dto.setQuantComodos(integerToString(domicilio.getQuantComodos()));
        dto.setQuantAposentadosRecebemPensao(integerToString(domicilio
                .getQuantAposentadosRecebemPensao()));
        dto.setQuantPessoasRecebemBeneficio(integerToString(domicilio
                .getQuantPessoasRecebemBeneficio()));
        dto.setTipoMaterialConstrucaoPredominante(domicilio.getTipoMaterialConstrucaoPredominante()
                .getDescricao());
        dto.setTipoBanheiro(domicilio.getTipoBanheiro().getDescricao());
        dto.setPossuiSisterna(domicilio.getPossuiSisterna().getDescricao());
        dto.setPossuiPoco(domicilio.getPossuiPoco().getDescricao());
        dto.setTipoVazaoPoco(domicilio.getTipoVazaoPoco() == null ? null : domicilio
                .getTipoVazaoPoco().getDescricao());
        dto.setTipoTerreno(domicilio.getTipoTerreno().getDescricao());
        dto.setTodosMoradoresPossuemRegistroCivil(domicilio.getTodosMoradoresPossuemRegistroCivil()
                .getDescricao());
        dto.setQuantMoradoresPossuemRegistroCivil(integerToString(domicilio
                .getQuantMoradoresPossuemRegistroCivil()));
        dto.setTodosMoradoresPossuemRG(domicilio.getTodosMoradoresPossuemRG().getDescricao());
        dto.setQuantMoradoresPossuemRG(integerToString(domicilio.getQuantMoradoresPossuemRG()));
        dto.setTodosMoradoresPossuemCPF(domicilio.getTodosMoradoresPossuemCPF().getDescricao());
        dto.setQuantMoradoresPossuemCPF(integerToString(domicilio.getQuantMoradoresPossuemCPF()));
        dto.setTodosMoradoresACima16AnosPossuemTituloEleitor(domicilio
                .getTodosMoradoresACima16AnosPossuemTituloEleitor().getDescricao());
        dto.setQuantMoradoresACima16AnosPossuemTituloEleitor(integerToString(domicilio
                .getQuantMoradoresACima16AnosPossuemTituloEleitor()));
        dto.setRendaFamiliar(domicilio.getRendaFamiliar().toString());
        dto.setQuantPessoasTrabalham(integerToString(domicilio.getQuantPessoasTrabalham()));
        dto.setQuantPessoasNaoSabemLerOuEscrever(integerToString(domicilio
                .getQuantPessoasNaoSabemLerOuEscrever()));
        dto.setNecessitaCartao(domicilio.getNecessitaCartao().getDescricao());
        dto.setObservacoes(entrevista.getObservacoes());

        return dto;
    }

    private static String integerToString(Integer valor) {
        return valor == null ? null : valor.toString();
    }

    public String getNomeEntrevistador() {
        return nomeEntrevistador;
    }

    public void setNomeEntrevistador(String nomeEntrevistador) {
        this.nomeEntrevistador = nomeEntrevistador;
    }

    public String getDataEntrevista() {
        return dataEntrevista;
    }

    public void setDataEntrevista(String dataEntrevista) {
        this.dataEntrevista = dataEntrevista;
    }

    public String getSequencial() {
        return sequencial;
    }

    public void setSequencial(String sequencial) {
        this.sequencial = sequencial;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getResponsavel() {
        return responsavel;
    }

    public void setResponsavel(String responsavel) {
        this.responsavel = responsavel;
    }

    public String getCpf() {
        return StringUtils.isBlank(this.cpf) ? null : DemarPesquisasUtil.formatarCpf(cpf);
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getRg() {
        return rg;
    }

    public void setRg(String rg) {
        this.rg = rg;
    }

    public String getOrgaoExpedidor() {
        return orgaoExpedidor;
    }

    public void setOrgaoExpedidor(String orgaoExpedidor) {
        this.orgaoExpedidor = orgaoExpedidor;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public String getCarteiraTrabalho() {
        return carteiraTrabalho;
    }

    public void setCarteiraTrabalho(String carteiraTrabalho) {
        this.carteiraTrabalho = carteiraTrabalho;
    }

    public String getRegistroNascimento() {
        return registroNascimento;
    }

    public void setRegistroNascimento(String registroNascimento) {
        this.registroNascimento = registroNascimento;
    }

    public String getCertificadoReservista() {
        return certificadoReservista;
    }

    public void setCertificadoReservista(String certificadoReservista) {
        this.certificadoReservista = certificadoReservista;
    }

    public String getLocalidade() {
        return localidade;
    }

    public void setLocalidade(String localidade) {
        this.localidade = localidade;
    }

    public String getTipoLocalidade() {
        return tipoLocalidade;
    }

    public void setTipoLocalidade(String tipoLocalidade) {
        this.tipoLocalidade = tipoLocalidade;
    }

    public String getRua() {
        return rua;
    }

    public void setRua(String rua) {
        this.rua = rua;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public List<Morador> getMoradores() {
        return moradores;
    }

    public void setMoradores(List<Morador> moradores) {
        this.moradores = moradores;
    }

    public String getQuantResidentes() {
        return quantResidentes;
    }

    public void setQuantResidentes(String quantResidentes) {
        this.quantResidentes = quantResidentes;
    }

    public String getQuantComodos() {
        return quantComodos;
    }

    public void setQuantComodos(String quantComodos) {
        this.quantComodos = quantComodos;
    }

    public String getQuantAposentadosRecebemPensao() {
        return quantAposentadosRecebemPensao;
    }

    public void setQuantAposentadosRecebemPensao(String quantAposentadosRecebemPensao) {
        this.quantAposentadosRecebemPensao = quantAposentadosRecebemPensao;
    }

    public String getQuantPessoasRecebemBeneficio() {
        return quantPessoasRecebemBeneficio;
    }

    public void setQuantPessoasRecebemBeneficio(String quantPessoasRecebemBeneficio) {
        this.quantPessoasRecebemBeneficio = quantPessoasRecebemBeneficio;
    }

    public String getTipoMaterialConstrucaoPredominante() {
        return tipoMaterialConstrucaoPredominante;
    }

    public void setTipoMaterialConstrucaoPredominante(String tipoMaterialConstrucaoPredominante) {
        this.tipoMaterialConstrucaoPredominante = tipoMaterialConstrucaoPredominante;
    }

    public String getOutroMaterialConstrucao() {
        return outroMaterialConstrucao;
    }

    public void setOutroMaterialConstrucao(String outroMaterialConstrucao) {
        this.outroMaterialConstrucao = outroMaterialConstrucao;
    }

    public String getTipoBanheiro() {
        return tipoBanheiro;
    }

    public void setTipoBanheiro(String tipoBanheiro) {
        this.tipoBanheiro = tipoBanheiro;
    }

    public String getPossuiSisterna() {
        return possuiSisterna;
    }

    public void setPossuiSisterna(String possuiSisterna) {
        this.possuiSisterna = possuiSisterna;
    }

    public String getPossuiPoco() {
        return possuiPoco;
    }

    public void setPossuiPoco(String possuiPoco) {
        this.possuiPoco = possuiPoco;
    }

    public String getTipoVazaoPoco() {
        return tipoVazaoPoco;
    }

    public void setTipoVazaoPoco(String tipoVazaoPoco) {
        this.tipoVazaoPoco = tipoVazaoPoco;
    }

    public String getTipoTerreno() {
        return tipoTerreno;
    }

    public void setTipoTerreno(String tipoTerreno) {
        this.tipoTerreno = tipoTerreno;
    }

    public String getTodosMoradoresPossuemRegistroCivil() {
        return todosMoradoresPossuemRegistroCivil;
    }

    public void setTodosMoradoresPossuemRegistroCivil(String todosMoradoresPossuemRegistroCivil) {
        this.todosMoradoresPossuemRegistroCivil = todosMoradoresPossuemRegistroCivil;
    }

    public String getQuantMoradoresPossuemRegistroCivil() {
        return quantMoradoresPossuemRegistroCivil;
    }

    public void setQuantMoradoresPossuemRegistroCivil(String quantMoradoresPossuemRegistroCivil) {
        this.quantMoradoresPossuemRegistroCivil = quantMoradoresPossuemRegistroCivil;
    }

    public String getTodosMoradoresPossuemRG() {
        return todosMoradoresPossuemRG;
    }

    public void setTodosMoradoresPossuemRG(String todosMoradoresPossuemRG) {
        this.todosMoradoresPossuemRG = todosMoradoresPossuemRG;
    }

    public String getQuantMoradoresPossuemRG() {
        return quantMoradoresPossuemRG;
    }

    public void setQuantMoradoresPossuemRG(String quantMoradoresPossuemRG) {
        this.quantMoradoresPossuemRG = quantMoradoresPossuemRG;
    }

    public String getTodosMoradoresPossuemCPF() {
        return todosMoradoresPossuemCPF;
    }

    public void setTodosMoradoresPossuemCPF(String todosMoradoresPossuemCPF) {
        this.todosMoradoresPossuemCPF = todosMoradoresPossuemCPF;
    }

    public String getQuantMoradoresPossuemCPF() {
        return quantMoradoresPossuemCPF;
    }

    public void setQuantMoradoresPossuemCPF(String quantMoradoresPossuemCPF) {
        this.quantMoradoresPossuemCPF = quantMoradoresPossuemCPF;
    }

    public String getTodosMoradoresACima16AnosPossuemTituloEleitor() {
        return todosMoradoresACima16AnosPossuemTituloEleitor;
    }

    public void setTodosMoradoresACima16AnosPossuemTituloEleitor(
            String todosMoradoresACima16AnosPossuemTituloEleitor) {
        this.todosMoradoresACima16AnosPossuemTituloEleitor =
                todosMoradoresACima16AnosPossuemTituloEleitor;
    }

    public String getQuantMoradoresACima16AnosPossuemTituloEleitor() {
        return quantMoradoresACima16AnosPossuemTituloEleitor;
    }

    public void setQuantMoradoresACima16AnosPossuemTituloEleitor(
            String quantMoradoresACima16AnosPossuemTituloEleitor) {
        this.quantMoradoresACima16AnosPossuemTituloEleitor =
                quantMoradoresACima16AnosPossuemTituloEleitor;
    }

    public String getRendaFamiliar() {
        return rendaFamiliar;
    }

    public void setRendaFamiliar(String rendaFamiliar) {
        this.rendaFamiliar = rendaFamiliar;
    }

    public String getQuantPessoasTrabalham() {
        return quantPessoasTrabalham;
    }

    public void setQuantPessoasTrabalham(String quantPessoasTrabalham) {
        this.quantPessoasTrabalham = quantPessoasTrabalham;
    }

    public String getQuantPessoasNaoSabemLerOuEscrever() {
        return quantPessoasNaoSabemLerOuEscrever;
    }

    public void setQuantPessoasNaoSabemLerOuEscrever(String quantPessoasNaoSabemLerOuEscrever) {
        this.quantPessoasNaoSabemLerOuEscrever = quantPessoasNaoSabemLerOuEscrever;
    }

    public String getNecessitaCartao() {
        return necessitaCartao;
    }

    public void setNecessitaCartao(String necessitaCartao) {
        this.necessitaCartao = necessitaCartao;
    }

    public String getObservacoes() {
        return observacoes;
    }

    public void setObservacoes(String observacoes) {
        this.observacoes = observacoes;
    }
}
